package com.hxm.demo.test1;

/**
 * description: add a description
 *
 * @author huangxiaoming
 * @version 1.0.0
 * @date 2022/10/10 14:17:21
 */
public class TestMinSwap {

    /**
     * 801. 使序列递增的最小交换次数
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] nums1 = new int[]{1, 2, 3, 8};
        int[] nums2 = new int[]{5, 6, 7, 4};
        System.out.println(minSwap(nums1, nums2));
    }

    /**
     * 我们有两个长度相等且不为空的整型数组 nums1 和 nums2 。在一次操作中，我们可以交换 nums1[i] 和 nums2[i]的元素。
     * <p>
     * 例如，如果 nums1 = [1,2,3,8] ， nums2 =[5,6,7,4] ，你可以交换 i = 3 处的元素，得到 nums1 =[1,2,3,4] 和 nums2 =[5,6,7,8] 。
     * 返回 使 nums1 和 nums2 严格递增 所需操作的最小次数 。
     * <p>
     * 数组 arr 严格递增 且  arr[0] < arr[1] < arr[2] < ... < arr[arr.length - 1] 。
     *
     * @param nums1
     * @param nums2
     * @return
     */
    public static int minSwap(int[] nums1, int[] nums2) {
        int n = nums1.length;
        int a = 0, b = 1;
        for (int i = 1; i < n; i++) {
            int at = a, bt = b;
            a = b = n;
            if (nums1[i] > nums1[i - 1] && nums2[i] > nums2[i - 1])  {
                a = Math.min(a, at);
                b = Math.min(b, bt + 1);
            }
            if (nums1[i] > nums2[i - 1] && nums2[i] > nums1[i - 1]) {
                a = Math.min(a, bt);
                b = Math.min(b, at + 1);
            }
        }
        return Math.min(a, b);
    }
}
